home *** CD-ROM | disk | FTP | other *** search
- /* DisplayDSSpec.c */
- /*
- * AddressOMatic Sample
- * DisplayDSSpec.c
- * Copyright © 1993 Apple Computer Inc. All rights reserved.
- *
- * These functions unpack and display a packed DSSpec structure.
- */
- #include "AddressOMaticTest.h"
- #define SPEC (*theDSSpecDumpPtr)
-
-
- void
- DisplayDSSpecType(
- register BrowserPtr browserPtr,
- OSType specType
- );
- void
- DisplayRecordID(
- register BrowserPtr browserPtr,
- RecordIDPtr recordIDPtr
- );
- void
- DisplayExtensionType(
- register BrowserPtr browserPtr,
- OSType extensionType
- );
- void
- DisplayExtensionSize(
- register BrowserPtr browserPtr,
- unsigned short extensionSize
- );
- void
- DisplayDNodeNumber(
- register BrowserPtr browserPtr,
- unsigned short dsRefNum
- );
- void
- DisplayCatalogName(
- register BrowserPtr browserPtr,
- const RStringPtr catalogNamePtr
- );
- void
- DisplayPathNames(
- register BrowserPtr browserPtr,
- unsigned short pathNameCount,
- RStringPtr *pathNameVector
- );
-
- /*
- * UnpackPackedDSSpec unpacks a DSSpec into its constituent parts.
- */
- void
- UnpackPackedDSSpec(
- register BrowserPtr browserPtr,
- PackedDSSpecPtr packedDSSpecPtr,
- register DSSpecDumpPtr theDSSpecDumpPtr
- )
- {
- CLEAR(SPEC);
- SPEC.isValidDSSpec = OCEValidPackedDSSpec(packedDSSpecPtr);
- if (SPEC.isValidDSSpec) {
- OCEUnpackDSSpec(packedDSSpecPtr, &SPEC.theDSSpec, &SPEC.recordID);
- SPEC.specType = OCEGetDSSpecInfo(&SPEC.theDSSpec);
- SPEC.isNonNullRLI = (SPEC.recordID.rli != NULL);
- if (SPEC.isNonNullRLI) {
- SPEC.isValidPackedRLI = OCEValidPackedRLI(SPEC.recordID.rli);
- if (SPEC.isValidPackedRLI) {
- OCEUnpackRLI(SPEC.recordID.rli, &SPEC.theDSSpecRLI);
- SPEC.isValidPackedPathName =
- OCEValidPackedPathName(SPEC.theDSSpecRLI.path);
- /*
- * SPEC.isValidPackedPathName is FALSE if we are passed a
- * reference to a printer or CPU in the AppleTalk catalog.
- */
- if (SPEC.isValidPackedPathName) {
- SPEC.nodeNameCount =
- OCEDNodeNameCount(SPEC.theDSSpecRLI.path);
- /*
- * Allocate a vector that is large enough to hold the
- * RStrings that make up the path list, then unpack it.
- */
- SPEC.partsVector = (RStringPtr *) NewPtrClear(
- sizeof (RStringPtr) * SPEC.nodeNameCount
- );
- if (SPEC.partsVector != NULL && MemError() == noErr) {
- SPEC.isValidPartsVector = TRUE;
- SPEC.unpackedNodeNameCount = OCEUnpackPathName(
- SPEC.theDSSpecRLI.path,
- SPEC.partsVector,
- SPEC.nodeNameCount
- );
-
- if (SPEC.unpackedNodeNameCount == SPEC.nodeNameCount)
- SPEC.isValidUnpackedNodeNameCount = TRUE;
- else {
- NOTE("\pInvalid unpackedNodeNameCount");
- }
- }
- else {
- LOG_Value("\pCan't make parts vector, status", MemError());
- }
- }
- else {
- NOTE("\pWarning: Invalid packed path name");
- }
- }
- else {
- NOTE("\pInvalid packed RLI");
- }
- }
- else {
- NOTE("\pValid DSSpec, but NULL RLI: not an error");
- }
- }
- else {
- NOTE("\pInvalid DSSpec");
- }
- }
-
-
- /*
- * Display the contents of an unpacked DSSpec.
- */
- void
- DisplayUnpackedDSSpec(
- register BrowserPtr browserPtr,
- register DSSpecDumpPtr theDSSpecDumpPtr
- )
- {
- DisplayDSSpecType(browserPtr, SPEC.specType);
- DisplayRecordID(browserPtr, &SPEC.recordID);
- DisplayExtensionType(browserPtr, SPEC.theDSSpec.extensionType);
- DisplayExtensionSize(browserPtr, SPEC.theDSSpec.extensionSize);
- if (SPEC.isValidPackedRLI == FALSE)
- NOTE("\pCan't display packed RLI");
- else {
- DisplayDNodeNumber(browserPtr, SPEC.theDSSpecRLI.dNodeNumber);
- DisplayCatalogName(
- browserPtr,
- (RStringPtr) SPEC.theDSSpecRLI.directoryName
- );
- }
- DisplayPathNames(browserPtr, SPEC.unpackedNodeNameCount, SPEC.partsVector);
- }
-
- void
- DisposeDSSpecDumpRecord(
- register BrowserPtr browserPtr,
- register DSSpecDumpPtr theDSSpecDumpPtr
- )
- {
- #pragma unused (browserPtr)
- if (SPEC.partsVector != NULL) {
- DisposePtr((Ptr) SPEC.partsVector);
- SPEC.partsVector = NULL;
- }
- }
-
- /*
- * These functions do the actual formatting and display.
- */
- void
- DisplayDSSpecType(
- register BrowserPtr browserPtr,
- OSType specType
- )
- {
- Str255 work;
- short i;
-
- work[0] = sizeof specType + 2;
- work[1] = '\'';
- BlockMove(&specType, &work[2], sizeof specType);
- for (i = 0; i < sizeof specType; i++) {
- if (work[2 + i] < ' ')
- work[2 + i] = 0xB0; /* Substitute "infinity sign" */
- }
- work[2 + sizeof specType] = '\'';
- switch (specType) {
- case kOCEInvalidDSSpec:
- pstrcat(work, "\p: Invalid DSSpec type"); break;
- case kOCEDirsRootDSSpec:
- pstrcat(work, "\p: Root of all catalogs"); break;
- case kOCEDirectoryDSSpec:
- pstrcat(work, "\p: Catalog"); break;
- case kOCEDNodeDSSpec:
- pstrcat(work, "\p: Catalog node"); break;
- case kOCERecordDSSpec:
- pstrcat(work, "\p: Record"); break;
- case kOCEentnDSSpec:
- pstrcat(work, "\p: Extension type is 'entn'"); break;
- case kOCENOTentnDSSpec:
- pstrcat(work, "\p: Extension type is not 'entn'"); break;
- default:
- pstrcat(work, "\p: Unknown catalog spec. type"); break;
- }
- NOTE(work);
- }
-
- void
- DisplayRecordID(
- register BrowserPtr browserPtr,
- RecordIDPtr recordIDPtr
- )
- {
- LOG_RString("\pLocal Record ID Name", recordIDPtr->local.recordName);
- LOG_RString("\pLocal Record ID Type", recordIDPtr->local.recordType);
- }
-
- void
- DisplayExtensionType(
- register BrowserPtr browserPtr,
- OSType extensionType
- )
- {
- LOG_OSType("\pExtension type", extensionType);
- }
-
- void
- DisplayExtensionSize(
- register BrowserPtr browserPtr,
- unsigned short extensionSize
- )
- {
- LOG_Value("\pExtension size", extensionSize);
- }
-
- void
- DisplayDNodeNumber(
- register BrowserPtr browserPtr,
- unsigned short dsRefNum
- )
- {
- LOG_Value("\pDNode RefNum", dsRefNum);
- }
-
- void
- DisplayCatalogName(
- register BrowserPtr browserPtr,
- const RStringPtr catalogNamePtr
- )
- {
- LOG_RString("\pCatalog Name", catalogNamePtr);
- }
-
- void
- DisplayPathNames(
- register BrowserPtr browserPtr,
- unsigned short pathNameCount,
- RStringPtr *pathNameVector
- )
- {
- short i;
- Str255 work;
- Str15 value;
-
- LOG_Value("\pPath Name count", pathNameCount);
- if (pathNameVector == NULL)
- NOTE("\pNULL path name vector");
- else {
- for (i = 0; i < pathNameCount; i++) {
- NumToString(i, value);
- pstrcpy(work, "\p[");
- pstrcat(work, value);
- pstrcat(work, "\p]");
- LOG_RString(work, pathNameVector[i]);
- }
- }
- }
-
-